package com.speedchina.permission.dao.sys;

import com.speedchina.framework.base.IDao;
import com.speedchina.permission.domain.sys.dto.ResourceDTO;
import com.speedchina.permission.domain.sys.entity.Resource;
import com.speedchina.permission.domain.sys.entity.Role;
import com.speedchina.permission.domain.sys.entity.User;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;
import java.util.Set;

/**
 *  DAO 类
 * @author winter
 * @date 2021-04-07 15:19:42
 */
public interface ResourceDao extends IDao<Resource> {
    /**
     * 只在postgresql数据库下使用，性能较差
     * 用户菜单-递归搜索父子节点关联关系
     * @param user
     * @return
     * @deprecated
     */
    List<ResourceDTO> queryUserMenu(User user);

    /**
     * 根据用户id查询用户拥有的菜单
     * @param id
     * @param type
     * @return
     */
    List<ResourceDTO> queryUserMenuList(@Param("id") String id,@Param("type") String type);

    /**
     * 查询 用户的权限集合
     * @param id
     * @return
     */
    Set<String> getUserPermissionsById(String id);

    /**
     * 只在postgresql数据库下使用，性能较差
     * 递归搜索子节点，并级联删除
     * @param id
     * @return
     * @deprecated
     */
    boolean deleteLinkedBatch(Serializable id);

    List<Role> getResourceRole(Serializable id);

    List<User> getResourceUser(Serializable id);
}